CREATE OR REPLACE FUNCTION get_stores_by_last_calendar_year_revenue()
RETURNS TABLE (
    store_id INT,
    store_name TEXT,
    number_of_orders BIGINT,
    total_quantity_sold BIGINT,
    total_revenue NUMERIC
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT
        s.store_id,
        s.name AS store_name,
        COUNT(DISTINCT o.order_num) AS number_of_orders,
        COALESCE(SUM(o.quantity), 0) AS total_quantity_sold,
        COALESCE(
            SUM(
                p.price
                * o.quantity
                * (1 - COALESCE(o.discount, 0) / 100.0)
            ),
            0
        ) AS total_revenue
    FROM store s
    LEFT JOIN sells se
        ON s.store_id = se.store_id
    LEFT JOIN product p
        ON se.code = p.code
    LEFT JOIN includes i
        ON p.code = i.code
    LEFT JOIN "order" o
        ON i.order_num = o.order_num
        AND o.last_modified_date >= DATE_TRUNC(
            'year',
            CURRENT_DATE
        ) - INTERVAL '1 year'
        AND o.last_modified_date < DATE_TRUNC(
            'year',
            CURRENT_DATE
        )
    GROUP BY
        s.store_id,
        s.name
    ORDER BY
        total_revenue DESC;
END;
$$;
